﻿import os
from docx import Document
from docx.shared import Inches

import sys
import io

# 修改标准输出的编码
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')

def merge_word_documents(input_folder):
    """
    合并多个格式相同的Word文
    参数:
        input_folder: 包含要合并的Word文档的文件夹路径
        output_file: 合并后的Word文档路径
    """
    # 创建一个新的Word文档作为合并结果
    merged_doc = Document()

    # 获取文件夹中所有.docx文件
    word_files = [f for f in os.listdir(input_folder) if f.endswith('.docx')]
    word_files.sort()  # 按文件名排序

    if not word_files:
        print("没有找到要合并的Word文档")
        return

    for i, filename in enumerate(word_files):
        file_path = os.path.join(input_folder, filename)
        print(f"正在合并: {filename}")

        # 打开当前Word文档
        doc = Document(file_path)

        # 除了第一个文档，其他文档前添加分页符
        if i > 0:
            merged_doc.add_page_break()

        # 复制段落
        for para in doc.paragraphs:
            # 添加新段落并复制样式和内容
            new_para = merged_doc.add_paragraph()
            new_para.style = para.style

            # 复制段落中的每个部分（考虑可能的不同格式）
            for run in para.runs:
                new_run = new_para.add_run(run.text)
                # 复制格式
                new_run.bold = run.bold
                new_run.italic = run.italic
                new_run.underline = run.underline
                new_run.font.name = run.font.name
                new_run.font.size = run.font.size
                new_run.font.color.rgb = run.font.color.rgb

        # 复制表格
        for table in doc.tables:
            # 添加新表格，复制行数和列数
            new_table = merged_doc.add_table(rows=len(table.rows), cols=len(table.columns))
            new_table.style = table.style

            # 复制表格内容和样式
            for i_row, row in enumerate(table.rows):
                for i_col, cell in enumerate(row.cells):
                    new_cell = new_table.cell(i_row, i_col)
                    # 复制单元格内容
                    new_cell.text = cell.text
                    # 复制单元格样式
                    new_cell.paragraphs[0].style = cell.paragraphs[0].style

    # 保存合并后的文档
    merged_doc.save(f"{input_folder}.docx")

    return f"{input_folder}.docx"


if __name__ == "__main__":
    # 示例用法
    input_directory = sys.argv[1]  # 存放要合并的Word文档的文件夹
    # 确保输入文件夹存在
    if not os.path.exists(input_directory):
        os.makedirs(input_directory)
        print(f"创建了输入文件夹: {input_directory}")
        print("请将需要合并的Word文档放入该文件夹后重新运行程序")
    else:
        abs_path = merge_word_documents(input_directory)
        result = abs_path.split('public/', 1)[-1]
        print(f"storage/{result}")
